<?php
/***
 * ActionLeaf (www.actionleaf.com / actionleaf.googlecode.com) PHP Framework
 * Copyright (c) 2008, Wess D. Cope <wess@wattz.net>
 * All rights reserved.								
 * 													
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:				   
 * 																				
 * 	* Redistributions of source code must retain the above copyright notice,	
 * 	this list of conditions and the following disclaimer.						
 * 																				
 * 	* Redistributions in binary form must reproduce the above copyright notice, 
 * 	this list of conditions and the following disclaimer in the documentation   
 * 	and/or other materials provided with the distribution. 						
 * 																				
 * 	* Neither the name of the <ORGANIZATION> nor the names of its contributors may
 * 	be used to endorse or promote products derived from this software without	 
 * 	specific prior written permission.											
 * 																				
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 	 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 	 
 * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 		 
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED  
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 	 
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 	 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 	 
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 	 
 * DAMAGE.																				 
 **/

function InputField (Array $details) {

	$attributes = '';
	$default    = isset($details['default']) ? $details['default'] : '';
	$field      = '<input type="%s" name="%s" id="%s" value="%s" %s/>';
	$id         = isset($details['id']) ? $details['id'] : $details['name'];
	$required   = isset($details['required']) ? $details['required'] : YES;
	$type       = isset($details['type']) ? $details['type'] : 'text';
	$validator  = isset($details['validator']) ? $details['validator'] : '';

	if (isset($details['attributes'])) {

		foreach ($details['attributes'] as $name => $value) 
		{
			$attributes .= " {$name}=\"{$value}\"";
		}

	}

	return array_merge($details,
					   array('errors'    => array(),
							 'field'     => sprintf($field, $type, $details['name'], $id, $default, $attributes),
							 'id'        => $id,
							 'label'     => $details['label'],
							 'labelTag'  => sprintf('<label for="%s">%s</label>', $details['name'], $details['label']),
							 'name'	     => $details['name'],
							 'required'  => $required,
							 'type'	     => $type,
							 'validator' => $validator));

}

function EmailField (Array $details) {

	$details['pattern'] = '/^[\w!#$%&\'*+-\/=?^_`{|}~]+(?:\.[\w!#$%&\'*+-\/=?^_`{|}~]+)*'.
						  '@(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]' .
						  '|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[a-z0-9]+)(?:[a-z0-9-]*[a-z0-9])*\.)+'.
						  '(?:me|arpa|com|edu|gov|int|mil|net|org|biz|info|name|pro|aero|coop|museum|' .
						  'travel|tel|mobi|jobs|[a-z]{2}))$/i';

	$details['type']      = 'text';
	$details['validator'] = 'email';

	return InputField($details);

}

function PasswordField (Array $details) {

	$details['type'] = 'password';

	return InputField($details);

}

function SelectField (Array $details) {

	$details['type'] = 'select';

    $attributes = '';
	$choices    = isset($details['choices']) ? $details['choices'] : array();
	$details    = InputField($details);

	$field      = "<select name=\"%s\" id=\"%s\" %s ~~multi~~>\n";

	$field = (isset($details['multiple']) && $details['multiple'])? str_replace("~~multi~~", "multiple size=5", $field) : str_replace("~~multi~~", "", $field);

	if (isset($details['attributes'])) {

		foreach ($details['attributes'] as $name => $value) {

			$attributes .= " {$name}=\"{$value}\"";

		}

	}
	
	$field = sprintf($field, $details['name'], $details['id'], $attributes);

	foreach ($details['choices'] as $label => $value) {

		if(isset($details['initial']))	 {

			// Handle Array of Pre selcted values
			if (is_array($details['initial'])) {

				if(in_array($value, $details['initial'])) {

					$field .= "<option value=\"{$value}\" selected=\"selected\">{$label}</option>\n";

				} else {

					$field .= "<option value=\"{$value}\">{$label}</option>\n";

				}

			// handle single string pre selected value
			} else {

				if($details['initial'] == $value) {

					$field .= "<option value=\"{$value}\" selected=\"selected\">{$label}</option>\n";

				} else {

					$field .= "<option value=\"{$value}\">{$label}</option>\n";

				}

			}

		} else {

			$field .= "<option value=\"{$value}\">{$label}</option>\n";

		}

	}

	$field .= '</select>';

	$details['field'] = $field;

	return $details;

}

/*
function IntegerField(Array $details)
{
	$details['pattern'] = '^\d+';

	$details['type']      = 'text';
	$details['validator'] = 'regex';

	return InputField($details);
}
*/

function TextField (Array $details) {

	return InputField($details);

}
